Option Explicit

'################################################################
' Descriptor
' 复合列结构 的 字段信息
'################################################################

Implements ISqlTranslateNameInfo
Implements ISqlTranslateColInfo

'################################################################
' Field
'################################################################
' 这里的列应该没有【别名】
' 被组合的多个列对象
' IObjArrayRef<ISqlTranslateColInfo>
Private colInfos As IObjArrayRef

' 当前列对象的别名 token
Private colAliasNameToken As SqlToken

'################################################################
' Function
'################################################################
' 获取所有的子列对象
' 如果从未添加过任何子列对象，则会返回一个 null
' @return IObjArrayRef<ISqlTranslateColInfo>
Public Function getColInfos() As IObjArrayRef
    Set getColInfos = colInfos
End Function

' 添加列对象
Public Sub addColInfo(ByRef c As ISqlTranslateColInfo)
    If c Is Nothing Then
        Exit Sub
    End If

    If colInfos Is Nothing Then
        Set colInfos = UtilsArrayRef.createRealObjArrayRef(5)
    End If

    colInfos.Add c
End Sub

'################################################################
' Implements ISqlTranslateColInfo Function
'################################################################
' 获取使用到的原始列名
Public Function ISQLTranslateColInfo_getOriginColName() As String
    ISQLTranslateColInfo_getOriginColName = ""
End Function

' 设置变换后的列名
Public Sub ISQLTranslateColInfo_setTranslatedColName(ByRef n As String)
    ' noop
End Sub

' 读取后的列名
Public Function ISQLTranslateColInfo_getTranslatedColName() As String
    ISQLTranslateColInfo_getTranslatedColName = ""
End Function

' 获取使用到的原始表名
Public Function ISQLTranslateColInfo_getTableName() As String
    ISQLTranslateColInfo_getTableName = ""
End Function

' 设置所在的表的别名
Public Sub ISQLTranslateColInfo_setTableAliasName(ByRef n As String)
    ' noop
End Sub

' 获取所在的表的别名
Public Function ISQLTranslateColInfo_getTableAliasName() As String
    ISQLTranslateColInfo_getTableAliasName = ""
End Function

' 设置当前列的别名
Public Sub ISQLTranslateColInfo_setAliasNameToken(ByRef token As SqlToken)
    Set colAliasNameToken = token
End Sub

' 获取当前列的别名
Public Function ISQLTranslateColInfo_getAliasName() As String
    If colAliasNameToken Is Nothing Then
        ISQLTranslateColInfo_getAliasName = ""
    Else
        ISQLTranslateColInfo_getAliasName = colAliasNameToken.value
    End If
End Function

' 翻译列信息
' @param startEnv 搜索表名的起始作用域(当前列所在的 env)
' @param translateType 转换的类型(逻辑->物理=0, 物理->逻辑=1)
Public Sub ISQLTranslateColInfo_translate(ByRef startEnv As ISqlTranslateEnv, ByRef em As ISqlEntityManager, ByVal translateType As Integer)
    If colInfos Is Nothing Then
        Exit Sub
    End If

    Dim i As Long
    Dim c As ISqlTranslateColInfo
    With colInfos
        For i = 0 To .MaxIndex
            Set c = .Item(i)

            c.translate startEnv, em, translateType
        Next
    End With
End Sub

'################################################################
' Implements ISqlTranslateNameInfo Function
'################################################################

' 获取转换后名称
Public Function ISqlTranslateNameInfo_getTranslatedName() As String
    'return ""
End Function

' 获取别名
Public Function ISqlTranslateNameInfo_getAliasName() As String
    ISqlTranslateNameInfo_getAliasName = ISQLTranslateColInfo_getAliasName
End Function

' 获取非要求类型的名称
Public Function ISqlTranslateNameInfo_getReverseTypeName() As String
    'return ""
End Function